package it.azienda.moretti.view;

import it.azienda.framework.utilita.Utilita;
import it.azienda.framework.view.Dettaglio;
import it.azienda.moretti.modello.BeanFermata;
import it.azienda.moretti.modello.BeanComune;
import it.azienda.framework.persistenza.DAOConnectionSingleton;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.component.html.HtmlForm;
import javax.faces.component.html.HtmlInputText;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class DettaglioFermata extends Dettaglio {

    private HtmlForm form = new HtmlForm();
    private BeanFermata beanFermata;

    public void setBeanFermata(BeanFermata beanFermata) {
        setObj(beanFermata);
        this.beanFermata = beanFermata;
    }

    public BeanFermata getBeanFermata() {
        return (BeanFermata) getObj();
    }

    public HtmlForm getForm() {
        form = (HtmlForm) Utilita.getSession().getAttribute("form");
        if (form == null) {
            form = new HtmlForm();
        }
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanFermata = (BeanFermata) ctx.getExternalContext().getRequestMap().get("beanFermata");

        controlloDopoSalvataggio(beanFermata);
        Utilita.getSession().removeAttribute("form");
        return form;
    }

    public void setForm(HtmlForm form) {
        setFormObject(form);
        this.form = form;
        Utilita.getSession().setAttribute("form", form);
    }

    public void lookUp(ValueChangeEvent event) {
        if (event.getOldValue() != null && event.getNewValue() != null) {
            if (!event.getOldValue().toString().toUpperCase().equals(event.getNewValue().toString().toUpperCase())) {
                if (event.getNewValue().toString().length() >= 1) {
                    FacesContext ctx = FacesContext.getCurrentInstance();
                    beanFermata = (BeanFermata) ctx.getExternalContext().getRequestMap().get("beanFermata");
                    setObj(beanFermata);
                    String descrizioneComune = new String("" + event.getNewValue());

                    String nomeBean = (String) event.getComponent().getAttributes().get("nomeBean");
                    String nomeBeanLookUp = (String) event.getComponent().getAttributes().get("nomeBeanLookUp");

                    if (nomeBean.equals("beanComune")) {
                        BeanComune beanComune = (BeanComune) lookUpRapido(descrizioneComune.toUpperCase(), nomeBeanLookUp);
                        if (beanComune == null) {
                            ((HtmlInputText) form.findComponent("descrizioneComune")).setSubmittedValue(null);
                            ((HtmlInputText) form.findComponent("codiceComune")).setSubmittedValue(null);
                            beanFermata.setBeanComune(new BeanComune());
                            setObj(beanFermata);
                            HtmlForm form = (HtmlForm) ctx.getViewRoot().findComponent("erroriDataBase");
                            form.setRendered(true);
                            ctx.addMessage("erroriDataBase", new FacesMessage("erroriDataBase", "Comune inesistente"));
                        } else {
                            beanFermata.setBeanComune(beanComune);
                            setObj(beanFermata);
                            ((HtmlInputText) form.findComponent("descrizioneComune")).setSubmittedValue(beanComune.getDescrizione());
                            ((HtmlInputText) form.findComponent("codiceComune")).setSubmittedValue(beanComune.getCodice().toString());
                        }
                    }
                    ctx.renderResponse();
                }
            }
        }
    }

    public boolean controlliPrimaSalvataggio() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanFermata = (BeanFermata) ctx.getExternalContext().getRequestMap().get("beanFermata");
        boolean errori = false;

        if (beanFermata.getIdComune().compareTo(new Long(0)) != 0) {
            BeanComune comune = new BeanComune(beanFermata.getIdComune());
            beanFermata.setBeanComune(comune);
        } else {
            beanFermata.setBeanComune(null);
        }
        if (beanFermata.getBeanComune().getId() == null) {
            HtmlForm form = (HtmlForm) ctx.getViewRoot().findComponent("erroriDataBase");
            form.setRendered(true);
            ctx.addMessage("erroriDataBase", new FacesMessage("Attenzione: Comune obbligatorio!"));
            errori = true;
        }

        if (beanFermata.getId() == null) {
            String query = " select max(comuni.codice) from BeanFermata comuni";
            Session session = null;
            Transaction tr = null;
            try {
                session = DAOConnectionSingleton.newSession();
                tr = session.beginTransaction();
                Query q = null;
                q = session.createQuery(query);
                ArrayList listaCodice = (ArrayList) q.list();
                Integer cod = (Integer) listaCodice.get(0);
                if (cod != null) {
                    this.beanFermata.setCodice(new Integer(cod.intValue() + 1));
                } else {
                    this.beanFermata.setCodice(new Integer(1));
                }
            } catch (Exception e) {
            }
        }

        if (errori) {
            controlloDopoSalvataggio(beanFermata);
            return true;
        }
        return false;
    }

    public void controlloDopoSalvataggio(Object obj) {
        BeanFermata fermata = (BeanFermata) obj;
        if (fermata.getBeanComune() == null) {
            fermata.setBeanComune(new BeanComune());
        }

        if (fermata.getBeanComune() != null) {
            if (fermata.getBeanComune().getId() != null) {
                fermata.setIdComune(fermata.getBeanComune().getId());
            }
        }
    }
}
